# 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
#  请你将两个数相加，并以相同形式返回一个表示和的链表。
#  你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
#
#  示例 1：
# 输入：l1 = [2,4,3], l2 = [5,6,4]
# 输出：[7,0,8]
# 解释：342 + 465 = 807.
#
#  示例 2：
# 输入：l1 = [0], l2 = [0]
# 输出：[0]
#
#  示例 3：
# 输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
# 输出：[8,9,9,9,0,0,0,1]
from com.example.linked.common import *


class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        tmp1, tmp2, res = l1, l2, ListNode(-1)
        tmp3 = res
        carry = 0
        while (tmp1 is not None) or (tmp2 is not None):
            var1 = tmp1.val if tmp1 is not None else 0
            var2 = tmp2.val if tmp2 is not None else 0
            sum = (var1 + var2 + carry) % 10
            carry = (var1 + var2 + carry) // 10
            tmp1 = tmp1.next if tmp1 is not None else None
            tmp2 = tmp2.next if tmp2 is not None else None
            tmp3.next = ListNode(sum)
            tmp3 = tmp3.next

        if carry != 0:
            tmp3.next = ListNode(carry)
        return res.next


if __name__ == "__main__":
    l1 = getListNode(2, 4, 3)
    l2 = getListNode(5, 6, 4)
    res = Solution().addTwoNumbers(l1, l2)
    vistListNode(res)
